package org.nacos.consumer.service.feign;

import java.util.Map;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@FeignClient(value = "service-provider")
public interface ProductService {
	
	/**
	 * @FeignClient 注解参数说明
	 *  value: 应用服务名称
	 *  name: 同 value
	 *  contextId: 用于指定 Bean 名称（当有多个冲突时）
	 *  qualifiers: 指定 Bean 别名
	 *  url: 服务 URL（可用于直接调用某个具体地址）
	 *  decode404: 是否对 404 错误解码而不是抛异常（默认 false）
	 *  configuration: 指定自定义配置类
	 *  fallback: 指定降级类
	 *  fallbackFactory: 指定降级工厂
	 *  path: 为所有方法路径指定前缀
	 *  primary: 是否首要 Bean（默认 true）
	 * 
	 *   可以配置超时和超时重试
	 * 
	 *   Spring Cloud OpenFeign 底层默认使用的是 JDK 的 HttpURLConnection 原生连接，每次网络请求都会创建一个新的连接，不会使用连接池，不能重用连接，
	 * 性能上肯定有影响，Spring Cloud OpenFeign 也是支持连接池框架的，可以直接切换提升性能
	 * 
	 *   Feign 提供了一个 RequestInterceptor 请求拦截器，实现该接口即可拦截请求，来实现一些自定义的操作，比如：添加自定义的请求 Header、追加请求参数等操作
	 */
	
	@RequestMapping(value = "/product/{id}", method = RequestMethod.GET)
	public Map<String, Object> queryProductInfo(@PathVariable("id") Integer productId);
}
